"""
Pool(N) N表示进程池中的进程数
- Pool.apply_async(func, args, kwds) 用于异步调用func
- Pool.apply(func, args, kwds) 用于同步调用func
- Pool.map(func, iterable) 用于同步调用func
- Pool.map_async(func, iterable) 用于异步调用func
- Pool.close() 关闭进程池，不再接受新的进程
- Pool.join() 主进程阻塞等待子进程的退出
- Pool.terminate() 结束工作进程，不再处理未处理的任务
"""
import multiprocessing
import os
import time


def task(name):
    print(f'{name} is running', 'pid=', os.getpid())
    time.sleep(1)


if __name__ == '__main__':
    print('主进程启动', 'pid=', os.getpid())
    start = time.time()

    pool = multiprocessing.Pool(3)
    for i in range(10):
        # 异步调用
        pool.apply_async(func=task, args=(f'进程{i}',))
        # 同步调用
        # pool.apply(func=task, args=(f'进程{i}',))
    pool.close()
    pool.join()

    end = time.time()
    print('主进程结束', 'pid=', os.getpid())
    print('耗时', end - start, 's')
